package entity

import (
	"errors"
	"fmt"
	"math"
	"time"

	"gorm.io/gorm"
	"shqsoft.cn/pas3ui/base"
)

//ShCompTyhq 同业活期台账导入
type ShCompTyhq struct {
	ID     int       `gorm:"AUTO_INCREMENT;primary_key;column:ID"`
	DTID   time.Time `gorm:"column:DTID"`   //导入日期
	JGH    string    `gorm:"column:JGH"`    //机构号
	ACNO   string    `gorm:"column:ACNO"`   //账号
	CUNM   string    `gorm:"column:CUNM"`   //户名
	ACBL   float64   `gorm:"column:ACBL"`   //余额
	INRT   float64   `gorm:"column:INRT"`   //利率
	LDQJS  float64   `gorm:"column:LDQJS"`  //类定期基数
	YDJS12 float64   `gorm:"column:YDJS12"` //12月底积数
	YDJS1  float64   `gorm:"column:YDJS1"`  //1月底积数
	YSJJS1 float64   `gorm:"column:YSJJS1"` //1月实际积数
	JSLR   float64   `gorm:"column:JSLR"`   //利润计算
	LLGX   float64   `gorm:"column:LLGX"`   //利润贡献
	FPLRS1 float64   `gorm:"column:FPLRS1"` //1月分配利润数
	JF     float64   `gorm:"column:JF"`     //绩费
	EMID1  *int      `gorm:"column:EMID1"`
	GH1    string    `gorm:"column:GH1"`   //工号1
	KHJL1  string    `gorm:"column:KHJL1"` //客户经理1
	ZB1    float64   `gorm:"column:ZB1"`   //占比1
	EMID2  *int      `gorm:"column:EMID2"`
	GH2    string    `gorm:"column:GH2"`   //工号2
	KHJL2  string    `gorm:"column:KHJL2"` //客户经理2
	ZB2    float64   `gorm:"column:ZB2"`   //占比2
	EMID3  *int      `gorm:"column:EMID3"`
	GH3    string    `gorm:"column:GH3"`   //工号3
	KHJL3  string    `gorm:"column:KHJL3"` //客户经理3
	ZB3    float64   `gorm:"column:ZB3"`   //占比3
	EMID4  *int      `gorm:"column:EMID4"`
	GH4    string    `gorm:"column:GH4"`   //工号4
	KHJL4  string    `gorm:"column:KHJL4"` //客户经理4
	ZB4    float64   `gorm:"column:ZB4"`   //占比4
	EMID5  *int      `gorm:"column:EMID5"`
	GH5    string    `gorm:"column:GH5"`   //工号5
	KHJL5  string    `gorm:"column:KHJL5"` //客户经理5
	ZB5    float64   `gorm:"column:ZB5"`   //占比5
	TS     int       `gorm:"column:TS"`
	AVVL   float64   `gorm:"column:AVVL"`
}

//TableName
func (ShCompTyhq) TableName() string {
	return "SH_COMP_TYHQ"
}

// BeforeCreate
func (u *ShCompTyhq) BeforeCreate(tx *gorm.DB) (err error) {
	sum := u.ZB1 + u.ZB2 + u.ZB3 + u.ZB4 + u.ZB5
	if math.Abs(sum-1) > 0.001 {
		err = errors.New("占比之和必须为100%")
		return
	}
	strSql := `SELECT "ID" FROM "T_SysUser" WHERE "SysUserID" =?`
	tx.Raw(strSql, u.GH1).Row().Scan(&u.EMID1)
	if u.EMID1 == nil {
		err = fmt.Errorf("工号1:%s在系统中没有找到！", u.GH1)
		return
	}
	if u.ZB2 > 0 {
		tx.Raw(strSql, u.GH2).Row().Scan(&u.EMID2)
		if u.EMID2 == nil {
			err = fmt.Errorf("工号2:%s在系统中没有找到！", u.GH2)
			return
		}
	}
	if u.ZB3 > 0 {
		tx.Raw(strSql, u.GH3).Row().Scan(&u.EMID3)
		if u.EMID3 == nil {
			err = fmt.Errorf("工号3:%s在系统中没有找到！", u.GH3)
			return
		}
	}
	if u.ZB4 > 0 {
		tx.Raw(strSql, u.GH4).Row().Scan(&u.EMID4)
		if u.EMID4 == nil {
			err = fmt.Errorf("工号4:%s在系统中没有找到！", u.GH4)
			return
		}
	}
	if u.ZB5 > 0 {
		tx.Raw(strSql, u.GH5).Row().Scan(&u.EMID5)
		if u.EMID5 == nil {
			err = fmt.Errorf("工号5:%s在系统中没有找到！", u.GH5)
			return
		}
	}
	monthAt := u.DTID
	totalDays := monthAt.AddDate(0, 1, -monthAt.Day()).Day()
	u.TS = totalDays
	return
}

//ShCompTyhqEF 返回结构体
func ShCompTyhqEF() base.EntityFunc {
	return func() interface{} {
		entity := ShCompTyhq{}
		return &entity
	}
}

//ShCompTyhqESF 返回结构体数组
func ShCompTyhqESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []ShCompTyhq
		return &entities
	}
}

func init() {
	base.DaoPoolObj.Put("ShCompTyhq", base.NewDefaultDao(ShCompTyhqEF(), ShCompTyhqESF(), nil, "my"))
}
